library(here)
library(magrittr)
library(dplyr)
library(readr)
library(stringr)
library(ggplot2)
library(viridis)

knitr::opts_chunk$set(echo = T,
                      message = F,
                      include = T,
                      out.width = '90%',
                      fig.align = 'center',
                      dpi = 200)

theme_set(theme_minimal())

# >>>>> custom funkcije
crossrefSpol <- function(name,
                         reference_list = d_infleks) {
    .crossref <- dplyr::filter(reference_list,
                               infleksijska_forma == name)

    if (nrow(.crossref) > 1) {
        return('nepoznato')
    }
    else if (nrow(.crossref) == 0) {
        return(NA_character_)
    }
    else {
        return(.crossref$spol)
    }
}

Podaci korišteni u ovom izvještaju dostupni su na Portalu otvorenih podataka (ovdje) Podaci korišteni u analizi preuzeti su 02. studenog 2021., u 13:48.

d_osnovne <- readr::read_csv2(here::here('data',
                                         'obrazovne-ustanove_popis_datagov',
                                         'popis_osnovne-skole.csv')) %>%
    janitor::clean_names(.)

d_srednje <- read_csv2(here('data',
                            'obrazovne-ustanove_popis_datagov',
                            'popis_srednje-skole.csv')) %>%
    janitor::clean_names(.)

d_visoko <- read_csv2(here('data',
                           'obrazovne-ustanove_popis_datagov',
                           'popis_visoko-obrazovanje.csv')) %>%
    janitor::clean_names(.)

d_infleks <- read_csv(here('data',
                           'infleksijska-baza',
                           'infleksijska-baza.csv'),
                      col_names = c('infleksijska_forma',
                                    'lema',
                                    'oznaka'))

Tablica s podacima o visokim učilištima sadrži stupac Celnik, u kojem su navedene čelne osobe institucija, s pripadajućim nazivom funkcije koju obnašaju (na primjer “dekanica” ili “dekan”).

tail(d_visoko$celnik)
## [1] "privremena dekanica prof. dr. sc. Vesnica Mlinarević"
## [2] "dekanica prof. dr. sc. Maja Fredotović"              
## [3] "dekanica prof. dr. sc. Jadranka Frece"               
## [4] "dekan prof. dr. sc. Goran Hauser"                    
## [5] "dekanica prof. dr. sc. Zrinka Tarle"                 
## [6] "dekan prof. dr. sc. Igor Gliha"

Budući da se naziv funkcije mijenja ovisno o spolu rukovodeće osobe, na temelju te informacije možemo doznati kojeg su spola čelnici visokoobrazovnih institucija u Hrvatskoj. Funkcije koje se javljaju u ovom skupu podataka su dekanica/dekan, pročelnica/pročelnik i rektorica/rektor.

d_visoko$spol <-
    dplyr::case_when(stringr::str_detect(d_visoko$celnik,
                                         'dekanica|rektorica|pročelnica') ~ 'z',
                     str_detect(d_visoko$celnik,
                                'dekan|rektor|pročelnik') ~ 'm',
                     T ~ NA_character_)

Popisi osnovnih i srednjih škola u sebi ne sadrže eksplicitan podatak o spolu ravnateljice odnosno ravnatelja. Međutim, budući da je na ovom području ime osobe snažan signal za njen spol, možemo iskoristiti infleksijsku bazu hrvatskih imena i prezimena1 da bismo dobili dobru procjenu spola osoba na rukovodećim pozicijama u osnovnim i srednjim školama.

Procjena spola čelnih osoba u osnovnim i srednjim školama

Infleksijska baza hrvatskih imena i prezimena sadrži tri stupca: infleksijske forme imena i prezimena, njihove leme, i leksičke oznake2:

head(d_infleks)
## # A tibble: 6 × 3
##   infleksijska_forma lema     oznaka  
##   <chr>              <chr>    <chr>   
## 1 Aaronson           Aaronson Np-sn   
## 2 Aaronsona          Aaronson Np-pg   
## 3 Aaronsona          Aaronson Np-sa--y
## 4 Aaronsona          Aaronson Np-sg   
## 5 Aaronsone          Aaronson Np-pa   
## 6 Aaronsone          Aaronson Np-sv

Prvo što trebamo napraviti jest izvući imena ravnateljica i ravnatelja iz popisa osnovnih i srednjih škola. Ti podaci nalaze se u varijabli Ravnatelj.

head(d_osnovne$ravnatelj)
## [1] "Ivica  Škrpaca"  "Lidija  Zekan"   "Nada  Dundović"  "Marin  Vuletin" 
## [5] "Iva  Petričević" "Mirela  Mijić"
head(d_srednje$ravnatelj)
## [1] "Ivan  Glibota"        "Ivan  Srzić"          "Vesna  Alebić"       
## [4] "Višnja  Popović"      "Romana  Vuksan Zuban" NA

Možemo vidjeti da unosi u polje prvo imaju navedena imena, a potom prezimena, te da su imena i prezimena odvojena samo razmacima3. Također možemo vidjeti da, iz nekog meni nepoznatog razloga, za neke škole nemamo navedeno ime ravnateljice, odnosno ravnatelja (označeno s NA).

Za procjenjivanje spola uzet ću samo prvu riječ upisanu u varijablu Ravnatelj za svaku školu. Zbog toga neću zahvatiti oba imena osoba koje imaju dva imena ako su ona odvojena razmakom (umjesto crticom; na primjer, ako je ime “Ana Marija”, dohvatit ću samo “Ana”, a ako je “Ana-Marija”, dohvatit ću “Ana-Marija”). Ipak, smatram da za samu procjenu spola to nije potrebno jer bi i samo jedno od višestrukih imena trebalo biti dovoljno.

d_osnovne$ravnatelj_ime <- d_osnovne$ravnatelj %>%
    stringr::str_extract(.,
                         pattern = '^\\w+')

d_srednje$ravnatelj_ime <- d_srednje$ravnatelj %>%
    str_extract(.,
                pattern = '^\\w+')

Jednom kad imamo imena, možemo ih usporediti s infleksijskom bazom imena i prezimena. U infleksijskoj bazi ću zadržati samo unose koji imaju oznaku Npfsn ili Npmsn jer, ako dobro tumačim bazu, te oznake stoje uz osobne imenice u nominativu jednine, pri čemu f i m označavaju da je ime tradicionalno žensko odnosno muško.

d_infleks <- dplyr::filter(d_infleks,
                           str_detect(oznaka,
                                      'Np(f|m)sn'))

d_infleks$spol <- case_when(str_detect(d_infleks$oznaka,
                                       'f') ~ 'z',
                            str_detect(d_infleks$oznaka,
                                       'm') ~ 'm')

Nakon toga, možemo usporediti popis imena u infleksijskoj bazi s popisima imena ravnateljica i ravnatelja. Ono na što je potrebno paziti su imena poput “Vanja”, koja se daju osobama oba spola, te koja u infleksijskoj bazi imaju dva unosa.

filter(d_infleks,
       infleksijska_forma == 'Vanja')
## # A tibble: 2 × 4
##   infleksijska_forma lema  oznaka spol 
##   <chr>              <chr> <chr>  <chr>
## 1 Vanja              Vanja Npfsn  z    
## 2 Vanja              Vanja Npmsn  m

Ako u bazi postoje takva imena, pod oznaku spola ću staviti nepoznato. Ako nekog imena nema u bazi, kao oznaku spola stavit ću NA.

d_osnovne$ravnatelj_spol <- apply(d_osnovne[, 'ravnatelj_ime'],
                                  MARGIN = 1,
                                  FUN = crossrefSpol)

d_srednje$ravnatelj_spol <- apply(d_srednje[, 'ravnatelj_ime'],
                                  MARGIN = 1,
                                  FUN = crossrefSpol)

Nakon prvog pokušaja povezivanja imena u infleksijskoj bazi i imena rukovodećih osoba u popisima škola, dobivamo poveći broj oznaka nepoznato; također, imamo ponešto oznaka NA, koje su dodijeljene osobama čije se ime ne nalazi u infleksijskoj bazi i ustanovama koje nemaju navedenu čelnu osobu. Za osnovne škole:

table(d_osnovne$ravnatelj_spol,
      useNA = 'always')
## 
##         m nepoznato         z      <NA> 
##       278        95       525        21

Za srednje škole:

table(d_srednje$ravnatelj_spol,
      useNA = 'always')
## 
##         m nepoznato         z      <NA> 
##       188        45       187        22

Podaci za te osobe su izvučeni u posebnu tablicu i ručno kodirani. U nekim slučajevima je ostavljena oznaka nepoznato jer nije bilo moguće s visokom razinom sigurnosti utvrditi spol osobe na temelju drugih javno dostupnih podataka (poput informacija na web stranici škole).

# >>>>> osnovne skole
d_osnovne_spol <- readr::read_tsv(here('data',
                                       'obrazovne-ustanove_popis_datagov',
                                       'popis_osnovne-skole_kod-spolova.tsv'))

. <- filter(d_osnovne,
            ravnatelj_spol == 'nepoznato')

d_osnovne %<>%
    filter(.,
           ravnatelj_spol != 'nepoznato' | is.na(ravnatelj_spol))

. <- left_join(.,
               d_osnovne_spol,
               by = c('naziv',
                      'zupnija',
                      'mjesto',
                      'adresa',
                      'ravnatelj',
                      'web'),
               suffix = c('_orig',
                          '_kod'))

. <- dplyr::select(.,
                   -'ravnatelj_spol_orig',
                   'ravnatelj_spol' = 'ravnatelj_spol_kod')

d_osnovne <- dplyr::bind_rows(d_osnovne,
                              .)

rm(d_osnovne_spol)

# rucno kodiranje osoba s imenima koja nisu u infleksijskoj bazi
d_osnovne[d_osnovne$ravnatelj == 'S. Mandica  Starčević' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'z'

d_osnovne[d_osnovne$ravnatelj == 'Maryline  Boussenard' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'z'

d_osnovne[d_osnovne$ravnatelj == 'Mileo  Todić' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'm'

d_osnovne[d_osnovne$ravnatelj == 'Volodymyr  Kubinskyy' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'm'

d_osnovne[d_osnovne$ravnatelj == 'Olivela  Franko' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'z'

d_osnovne[d_osnovne$ravnatelj == 'Lareta  Žubrinić' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'z'

d_osnovne[d_osnovne$ravnatelj == 'Kinga  Kolar' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'z'

d_osnovne[d_osnovne$ravnatelj == 'Vranko  Perković' &
          !is.na(d_osnovne$ravnatelj),
          'ravnatelj_spol'] <- 'm'

# >>>>> srednje skole
d_srednje_spol <- readr::read_tsv(here('data',
                                       'obrazovne-ustanove_popis_datagov',
                                       'popis_srednje-skole_kod-spolova.tsv'))

. <- filter(d_srednje,
            ravnatelj_spol == 'nepoznato')

d_srednje %<>%
    filter(.,
           ravnatelj_spol != 'nepoznato' | is.na(ravnatelj_spol))

. <- left_join(.,
               d_srednje_spol,
               by = c('naziv',
                      'zupanija',
                      'mjesto',
                      'adresa',
                      'ravnatelj',
                      'web'),
               suffix = c('_orig',
                          '_kod'))

. <- dplyr::select(.,
                   -'ravnatelj_spol_orig',
                   'ravnatelj_spol' = 'ravnatelj_spol_kod')

d_srednje <- bind_rows(d_srednje,
                       .)

rm(d_srednje_spol)

# rucno kodiranje osoba s imenima koja nisu u infleksijskoj bazi
d_srednje[d_srednje$ravnatelj == 'Volodymyr  Kubinskyy' &
          !is.na(d_srednje$ravnatelj),
          'ravnatelj_spol'] <- 'm'

d_srednje[d_srednje$ravnatelj == 'Alejandro  Castillo Jimenez' &
          !is.na(d_srednje$ravnatelj),
          'ravnatelj_spol'] <- 'm'

d_srednje[d_srednje$ravnatelj == 'Mevludi  Arslani' &
          !is.na(d_srednje$ravnatelj),
          'ravnatelj_spol'] <- 'm'

Spolna struktura rukovodećih osoba u hrvatskom obrazovnom sustavu

Sad kad imamo procjenu spola za većinu rukovodećih osoba u osnovnim i srednjim školama, te na visokim učilištima, možemo analizirati njihovu spolnu strukturu.

d <- bind_rows(select(d_osnovne,
                      naziv,
                      tip_ustanove,
                      'celnik' = ravnatelj,
                      'spol' = ravnatelj_spol),
               select(d_srednje,
                      naziv,
                      tip_ustanove,
                      'celnik' = ravnatelj,
                      'spol' = ravnatelj_spol),
               select(d_visoko,
                      'naziv' = naziv_ustanove,
                      'tip_ustanove' = vrsta_ustanove,
                      celnik,
                      spol))

U podacima imamo 1494 ustanove (919 osnovnih škola, 442 srednje škole i 133 visoka učilišta). Međutim, samo za 1462 čelne osobe imamo nekakav podatak o spolu. U daljnjem tekstu ću se fokusirati na podskup ustanova za koje imamo procjenu spola čelne osobe.

d %<>%
    tidyr::drop_na(.,
                   spol)

d_dedupe <- d[!duplicated(d$celnik), ]

. <- table(d_dedupe$spol,
           useNA = 'ifany')

Sveukupno, na čelnim pozicijama imamo 1448 osoba. Čelnih osoba je manje nego ustanova zato jer su neki ljudi istovremeno čelnici nekoliko ustanova. Od tih 1448 čelnih osoba, procjenjujem da su 671 muškarci i 769 žene (8 nepoznato).

Kad to razlomimo po osnovnim i srednjim školama te visokim učilištima dobivamo:

.o <- select(d_osnovne,
             'spol' = ravnatelj_spol) %>%
    dplyr::mutate(.,
                  'vrsta_ustanove' = 'Osnovna škola') %>%
    tidyr::drop_na(.)

.s <- select(d_srednje,
             'spol' = ravnatelj_spol) %>%
    mutate(.,
           'vrsta_ustanove' = 'Srednja škola') %>%
    tidyr::drop_na(.)

.v <- select(d_visoko,
             spol) %>%
    mutate(.,
           'vrsta_ustanove' = 'Visoko učilište') %>%
    tidyr::drop_na(.)

.d <- bind_rows(.o,
                .s,
                .v)

. <- table(.d$vrsta_ustanove,
           .d$spol)

. <- .[, c('m', 'z', 'nepoznato')]

dimnames(.)[[2]] <- case_when(dimnames(.)[[2]] == 'z' ~ 'žene',
                              dimnames(.)[[2]] == 'm' ~ 'muškarci',
                              T ~ dimnames(.)[[2]])

knitr::kable(.)
muškarci žene nepoznato
Osnovna škola 351 548 7
Srednja škola 226 196 1
Visoko učilište 101 32 0

Kao alternativni pogled na ove podatke, na slici ispod prikazana je procijenjena proporcija muškaraca i žena na čelnim pozicijama unutar osnovnih škola, srednjih škola, i visokih učilišta (isključene su osobe s oznakom nepoznato).4

.d %>%
    filter(.,
           spol != 'nepoznato') %>%
    mutate(.,
           across(spol,
                  ~ifelse(.x == 'm', 0, 1))) %>%
    dplyr::group_by(.,
                    vrsta_ustanove) %>%
    dplyr::summarise(.,
                     prop_z = mean(spol),
                     prop_m = 1 - mean(spol)) %>%
    tidyr::pivot_longer(.,
                        cols = matches('^prop'),
                        names_pattern = 'prop_(.)',
                        names_to = 'spol',
                        values_to = 'proporcija') %>%
    mutate(.,
           across(spol,
                  as.factor)) %>%
    ggplot2::ggplot(.,
                    aes(x = vrsta_ustanove,
                        fill = spol,
                        y = proporcija)) +
    geom_bar(stat = 'identity',
             position = 'dodge',
             color = 'black',
             alpha = 1) +
    scale_fill_viridis_d(name = 'Spol',
                         labels = as_labeller(c('m' = 'muškarci',
                                                'z' = 'žene'))) +
    scale_y_continuous(breaks = seq(0,
                                    1,
                                    by = .1),
                       labels = as.character(seq(0,
                                                 1,
                                                 by = .1))) +
    coord_cartesian(ylim = c(0, .8)) +
    theme(panel.grid.major.x = element_blank(),
          panel.grid.minor.y = element_line(linetype = 'dashed',
                                            size = .5),
          legend.position = c(.93, .7),
          plot.caption.position = 'plot',
          plot.caption = element_text(hjust = .5)) +
    labs(x = 'Vrsta ustanove',
         y = 'Proporcija',
         caption = paste('Proporcija žena i muškaraca na rukovodećim',
                         'pozicijama obrazovnih ustanova različitih razina.'))

Također, možemo vidjeti kakva je distribucija spolova po sastavnicama sveučilišta u Osijeku, Rijeci, Splitu i Zagrebu5:

. <- dplyr::filter(d_visoko,
                   str_detect(nadredjena_ustanova,
                              'Sveučilište')) %$%
    table(spol,
          nadredjena_ustanova)

dimnames(.)[[1]] <- case_when(dimnames(.)[[1]] == 'z' ~ 'Ženski',
                              dimnames(.)[[1]] == 'm' ~ 'Muški')

knitr::kable(.)
Sveučilište Josipa Jurja Strossmayera u Osijeku Sveučilište u Rijeci Sveučilište u Splitu Sveučilište u Zagrebu
Muški 13 7 13 27
Ženski 4 9 3 7

Napomene

Kao skupovi podataka koji predstavljaju temeljnu istinu u ovom slučaju uzeti su skupovi koji su datuma navedenog u uvodnom odlomku bili dostupni na stranicama data.gov.hr. Dakle, ako je u tim podacima krivo navedena čelna osoba neke insitutcije, ta se pogreška odražava u procjeni.

Zahvale

  1. Katharini Obraz za pomoć pri kodiranju spolova ravnateljica i ravnatelja osnovnih i srednjih škola.

  1. Damir Boras, Nives Mikelić, Davor Lauc (2003). Leksička flektivna baza podataka hrvatskih imena i prezimena, str. 219-236.↩︎

  2. Nisam uspio pronaći dokumentaciju za ovaj skup podataka, tako da su sva tumačenja moja osobna procjena. Pretpostavio sam da se leksičke oznake mogu tumačiti u skladu s oznakama dostupnima ovdje: https://www.sketchengine.eu/multext-east-croatian-part-of-speech-tagset/↩︎

  3. Zapravo, čini mi se da su višestruka imena i prezimena odvojena jednim razmakom, a da su imena i prezimena međusobno odvojena dvama razmacima. Na primjer, kad bismo razmak označili podvlakom _, imali bismo Ime1_Ime2__Prezime1_Prezime2.↩︎

  4. Obrazovne ustanove su ovdje kategorizirane kao osnovne ili srednje škole, ili visoka učilišta na temelju toga iz kojeg su registra preuzeti njihovi podaci.↩︎

  5. Ovdje su isključene rektorice i rektori.↩︎